package dbops

import (
	"database/sql"
	"fmt"
)

//创建用户表
func CreateUserTable(db *sql.DB) error {
	_, err := db.Exec(`CREATE TABLE IF NOT EXISTS table_user (
	    user_id INT(64) NOT NULL AUTO_INCREMENT COMMENT '用户id',
	    login_name VARCHAR(64) NULL DEFAULT NULL COMMENT '用户账号',
	    pwd VARCHAR(64) NULL DEFAULT NULL COMMENT '用户密码',
		name VARCHAR(64) NULL DEFAULT '未设置名称',
	    created TIMESTAMP NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
	    PRIMARY KEY (user_id)
	)AUTO_INCREMENT = 10000`)
	return err
}

//创建树表
func CreateTreeTable(db *sql.DB) error {
	_, err := db.Exec(`CREATE TABLE IF NOT EXISTS table_tree (
	    id INT(64) NOT NULL AUTO_INCREMENT COMMENT '数据id',
	    tree_id VARCHAR(64) NULL DEFAULT NULL COMMENT '树ID',
	    node_id VARCHAR(64) NULL DEFAULT NULL COMMENT '节点ID',
	    node_name VARCHAR(64) NULL DEFAULT NULL COMMENT '节点名字',
		node_parent_id VARCHAR(64) NULL DEFAULT NULL COMMENT '节点的父id',
		created_id VARCHAR(64) NULL DEFAULT NULL COMMENT '创建人的ID',
		depth VARCHAR(64) NULL DEFAULT NULL COMMENT '树的深度,0开始',
		sort VARCHAR(64) NULL DEFAULT NULL COMMENT 'sort(增)',
		code VARCHAR(64) NULL DEFAULT NULL COMMENT 'code(增)',
		no VARCHAR(64) NULL DEFAULT NULL COMMENT '序号,客户端填写',
	    created TIMESTAMP NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
	    PRIMARY KEY (id)
	)AUTO_INCREMENT = 0`)
	return err
}

//创建树的用户表
func CreateUserTreeTable(db *sql.DB) error {
	_, err := db.Exec(`CREATE TABLE IF NOT EXISTS table_user_tree (
	    id INT(64) NOT NULL AUTO_INCREMENT COMMENT '数据id',
	    tree_id VARCHAR(64) NULL DEFAULT NULL COMMENT '树ID',
	    tree_user VARCHAR(64)  NULL COMMENT '拥有权限的用户',
		created_id VARCHAR(64) NULL DEFAULT NULL COMMENT '创建人的ID',
		tree_type VARCHAR(64) NULL DEFAULT NULL COMMENT'树的种类,比如模型树,模板树等等',
	    created TIMESTAMP NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
	    PRIMARY KEY (id)
	)AUTO_INCREMENT = 0`)
	return err
}

//创建模板树的模板表
func CreateTemplateTable(db *sql.DB) error {
	_, err := db.Exec(`CREATE TABLE IF NOT EXISTS table_tree_template (
	    id INT(64) NOT NULL AUTO_INCREMENT COMMENT '数据id',
	    template_id VARCHAR(64) NOT NULL  COMMENT '模板的ID',
	    tree_node_id VARCHAR(64) NULL DEFAULT NULL COMMENT '树节点的ID',
	    no VARCHAR(64)  NULL COMMENT '序号',
		name VARCHAR(64) NULL DEFAULT NULL COMMENT '工程项目名称',
		unit VARCHAR(64) NULL DEFAULT NULL COMMENT '单位',
		design_num VARCHAR(64) NULL DEFAULT NULL COMMENT '设计量',
		price VARCHAR(64) NULL DEFAULT NULL COMMENT '价格',
		remarks VARCHAR(64) NULL DEFAULT NULL COMMENT '备注',
	    created TIMESTAMP NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
	    PRIMARY KEY (id)
	)AUTO_INCREMENT = 0`)
	return err
}

//创建模板树的模板表
func CreateModelTable(db *sql.DB) error {
	_, err := db.Exec(`CREATE TABLE IF NOT EXISTS table_tree_model (
	    id INT(64) NOT NULL AUTO_INCREMENT COMMENT '数据id',
	    model_id VARCHAR(64) NOT NULL  COMMENT '模型的ID',
	    node_id VARCHAR(64) NULL DEFAULT NULL COMMENT '树节点的ID',
		name VARCHAR(64) NULL DEFAULT NULL COMMENT '模型的名字',
		path VARCHAR(64) NULL DEFAULT NULL COMMENT '模型的路径',
		created_id VARCHAR(64) NULL DEFAULT NULL COMMENT '创建人的ID',
		versions INT(64) NULL DEFAULT NULL COMMENT '模型的版本',
	    created TIMESTAMP NOT NULL DEFAULT current_timestamp COMMENT '创建时间',
	    PRIMARY KEY (id)
	)AUTO_INCREMENT = 0`)
	return err
}
func UpTreeTable(db *sql.DB) error {
	err := AddColumn(db, "table_tree", "created_id", "")
	if err != nil {
		return err
	}
	err = AddColumn(db, "table_tree", "model_id", "")
	if err != nil {
		return err
	}
	return err
}
func AddColumn(db *sql.DB, tableName, columnName string, defaultValue string) error {
	result, err := db.Prepare(`SELECT count(*) FROM information_schema.columns WHERE table_name = ? AND column_name = ?`)
	if err != nil {
		return err
	}
	defer result.Close()
	rows, err := result.Query(tableName, columnName)
	if err != nil {
		return err
	}
	defer rows.Close()
	if rows.Next() {
		var num int
		err := rows.Scan(&num)
		if err != nil {
			return err
		}
		if num <= 0 {
			_, err := db.Exec(fmt.Sprintf("ALTER TABLE %s ADD %s VARCHAR(64) NULL DEFAULT '%v'", tableName, columnName, defaultValue))
			if err != nil {
				return err
			}
		}
	}

	return nil
}

//创建会话列表
func CreateSessionTable(db *sql.DB) error {
	_, err := db.Exec(`CREATE TABLE IF NOT EXISTS sessions (
     session_id VARCHAR(64) PRIMARY KEY NOT NULL,
     user_id VARCHAR(64) ,
     session TEXT NOT NULL,
	 created TIMESTAMP NOT NULL DEFAULT current_timestamp,
     write_time TIMESTAMP NOT NULL DEFAULT current_timestamp
)`)
	return err
}
